package com.kakarote.admin.service;

import com.kakarote.admin.entity.BO.AdminDeptBO;
import com.kakarote.admin.entity.BO.AdminDeptQueryBO;
import com.kakarote.admin.entity.BO.DeptVO;
import com.kakarote.admin.entity.PO.AdminDept;
import com.kakarote.admin.entity.VO.AdminDeptRoleVO;
import com.kakarote.admin.entity.VO.AdminDeptVO;
import com.kakarote.common.log.entity.OperationLog;
import com.kakarote.core.entity.BasePage;
import com.kakarote.core.entity.PageEntity;
import com.kakarote.core.entity.QueryParentDeptBO;
import com.kakarote.core.feign.admin.entity.SimpleDept;
import com.kakarote.core.servlet.BaseService;

import java.util.List;
import java.util.Map;

/**
 * <p>
 * 部门表 服务类
 * </p>
 *
 * @author zhangzhiwei
 * @since 2020-04-27
 */
public interface IAdminDeptService extends BaseService<AdminDept> {

    /**
     * 查询部门树
     *
     * @param queryBO 上级ID
     * @return data
     */
    public List<AdminDeptVO> queryDeptTree(AdminDeptQueryBO queryBO);

    /**
     * 查询部门下属部门
     *
     * @param parentId 上级ID
     * @return data
     */
    public List<Long> queryChildDept(Long parentId);

    /**
     * 新增部门
     *
     * @param adminDeptBO 部门信息
     * @return
     */
    public OperationLog addDept(AdminDeptBO adminDeptBO);


    /**
     * 修改部门
     *
     * @param adminDeptBO 部门信息
     */
    public OperationLog setDept(AdminDeptBO adminDeptBO);

    /**
     * 删除部门
     *
     * @param deptId 部门ID
     * @return
     */
    public OperationLog deleteDept(Long deptId);


    /**
     * 根据ids查询用户信息
     *
     * @param ids id列表
     * @return data
     */
    public List<SimpleDept> queryDeptByIds(List<Long> ids);

    /**
     * 查询所有部门用户
     *
     * @param
     * @return 部门类
     */
    List<DeptVO> queryDeptUserList();


    BasePage<AdminDeptRoleVO> queryDeptByRole(Long roleId, PageEntity page);

    /**
     * 获取指定部门的上级部门ID
     *
     * @param queryBO 查询条件
     * @return 列表
     */
    List<Long> queryParentDeptIdByLevel(QueryParentDeptBO queryBO);

    void setDeptSort(List<Long> deptIds);

    Long getLogicDeptId();

    /**
     * 获取同层级部门
     * @param deptId
     * @return
     */
    List<Long> querySameLevelDeptId(Long deptId);

    /**
     * 获取所有部门
     * @return
     */
    List<SimpleDept> queryDeptList();

    /**
     * 获取部门是否存在指定角色
     * @param deptId
     * @param label
     * @return
     */
    Boolean queryDeptIsExistRole(Long deptId, Long label);
}
